package com.gao;

import com.gao.autodetect.AutoDetectModeBean;
import com.gao.byname.ByNameModeBean;
import com.gao.bytype.ByTypeModeBean;
import com.gao.construct.ConstructModeBean;
import com.gao.no.NoModeBean;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Arrays;

/**
 * @author GaoXi
 * @date 2022/2/22 19:57
 */
public class Starter {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        //no 模式是默认模式 不开自动注入
        NoModeBean bean = applicationContext.getBean(NoModeBean.class);
        System.out.println(bean);
        //byName 模式 必须指定setter方法且 依赖的bean名称也要指定好
        ByNameModeBean bean1 = applicationContext.getBean(ByNameModeBean.class);
        System.out.println(bean1);
        //byType 模式  必须有setter方法即可(多个Type相同会报错)
        ByTypeModeBean bean2 = applicationContext.getBean(ByTypeModeBean.class);
        System.out.println(bean2);
        //construct 模式 多个构造函数时会优先选择最优的那个(可注入Bean最多的) 测试autowire-candidate 无需setter
        ConstructModeBean bean3 = applicationContext.getBean(ConstructModeBean.class);
        System.out.println(bean3);
        //autodetect模式
        AutoDetectModeBean bean4 = applicationContext.getBean(AutoDetectModeBean.class);
        System.out.println(bean4);
    }
}
